import sys
import os

sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))

from config import result_bucket
from aws_model.athena_submit import submit
from sql_lambda.delete import delete_data
from base_class.inspect_logging import print_to_log
import datetime
import json
from aws_model.aws_stepfunc import send_task_success, send_task_failure


def result_xhgztop10dyddlxsl(event):
    date = event.get('p_date')
    if not date:
        date = datetime.datetime.today().strftime('%Y-%m-%d')
    table_name = sys._getframe().f_code.co_name
    delete_data(result_bucket,table_name, date)
    sql = f'''insert into fridge_biz_result.result_xhgztop10dyddlxsl
                    (
                    select
                        t1.model, t1.material, t2.order_type, t2.order_count, t1.fault_count as order_total, t2.time
                    from  
                        (
                            select
                                *
                            from
                                fridge_biz_result.result_xhgztop10
                            where
                                time = format_datetime(date('{date}') - interval '1' month, 'YYYY-MM')
                            ) t1
                    left join  
                        ( 
                            select  
                                if(model is null,'',model) as model, order_type,
                                sum(count(distinct objectid)) over(PARTITION BY if(model is null,'',model),order_type) as order_count,
                                sum(count(distinct objectid)) over() as order_total,
                                format_datetime(date('{date}') - interval '1' month, 'YYYY-MM') as time 
                            from  
                                ( 
                                    select  
                                        upper(if(t2.model is null,regexp_extract(zzfld000036,'[a-zA-Z0-9]+-[a-zA-Z0-9]+') ,t2.model)) as model,
                                        if(zzfld00002ft is null or zzfld00002ft = '','未知',zzfld00002ft) as order_type, objectid
                                    from 
                                        ods.kyd_ods t1
                                    left join
                                        dim.material t2
                                    on
                                        substr(zzfld00000b,4,7) = t2.material
                                    where 
                                        date(p_date)>=(date('{date}') - interval '1' month)   
                                    and 
                                        date(p_date) < date('{date}')
                                    and 
                                        zzfld000001='QT30'
                                    and
                                        length(zzfld00000b) =24
                                ) t 
                            group by 
                                if(model is null,'',model), order_type
                        ) t2 
                    on
                    t1.model= t2.model
                    )
                 '''

    athena_response = submit(sql)
    print_to_log("athena_response: ", athena_response)
    output = {"msg": f"{table_name} submit ok", "Payload": {}}
    output = json.dumps(output)
    step_response = send_task_success(tasktoken, output)
    print_to_log("step_response: ", step_response)


if __name__ == '__main__':
    try:
        event = json.loads(sys.argv[1])
        tasktoken = event.get('TaskToken')
        result_xhgztop10dyddlxsl(event)
    except Exception as e:
        print_to_log("athena_submit 失败")
        print_to_log("原因： ", str(e))
        send_task_failure(str(e), f'执行{sys._getframe().f_code.co_filename}错误', tasktoken)

